const mongoose = require('mongoose');
var Cate = require('../models/cate.model');  //引数据模型

//新增
exports.create = function(req,res,next){
	var cate = new Cate(req.body);
	
	cate.save()
	.then(data=>{
		res.json(data);
	})
}

//修改
exports.update = function(req,res,next){
	var id = req.params.id;  //req.param('id')
	//现在操作的都是mongoose而不是mongodb
	Cate.findByIdAndUpdate(id,{$set:req.body},{new:false})
	.then(data=>{  
		res.json({msg:'数据修改成功',status:200});  //如果你要返回数据，这个data返回的是你之前修改的那个数据内容
	})
}

//删除（包括子节点）
exports.remove = function(req,res,next){
	var id = req.params.id;
	var ids = [];
	
	Cate.findOne({_id:id},function(err,doc){
		if(doc){
			ids = [doc._id];  //因为我们用的是getChildren,并不包括自己，所以需要先将自己放到数组中
			
			doc.getChildren().then(function(docs){
				for(var i=0;i<docs.length;i++){
					ids.push(docs[i]._id);
				}
				
				Cate.remove({_id:{$in:ids}})
				.then(data=>{
					res.json({"msg":"数据删除成功",status:200})
				})
			})
		}
		
	})
}

function reverseTree(data,pid){  //pid-->parentId
	var result=[];
	var temp;
	
	var data = JSON.parse(JSON.stringify(data));  //非常重要，将数据模型的data进行了一个转化，转成了普通的json对象
	
	for(var i in data){
		if(data[i].parentId === pid){
			result.push(data[i]);
			
			temp = reverseTree(data,data[i]._id);  //递归操作
			
			if(temp.length > 0){
				data[i].children = temp;
			}
		}
	}
	return result;
}

exports.list = function(req,res,next){
	var type = req.params.type;
	Cate.find({type:type},function(err,data){
		var rpTree = reverseTree(data,null);
		res.json(rpTree);
	});
}